package co.edu.ucatolica.sislab.persistence.utils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**
 * Encargado de realizar operaciones generales sobre la base de datos
 */
public class PersistenceUtils {
	/**
	 * Cierra la conexion a la base de datos
	 * @param conn Conexion a la base de datos
	 */
	private static void closeConnection( Connection conn ) {
		if ( conn != null ) {
			DAOFactory factory = DAOFactory.getInstancia();
			factory.cerrarConexion(conn);
		}
	}
		
	/**
	 * Cierra un PreparedStatament
	 * @param prepareStament Prepare Stament a cerrar
	 */
	private static void closePrepareStatement( PreparedStatement prepareStament ) {
		try {
    		if ( prepareStament != null )
    			prepareStament.close();
    	} catch( Exception e ) {}
	}

	/**
	 * Cierra un Resultset
	 * @param resulset Result Set a cerrar
	 */
	private static void closeResultset( ResultSet resulset ) {
		try {
    		if ( resulset != null )
    			resulset.close();
    	} catch( Exception e ) {}
	}
	
	/**
	 * Cierra los elementos de conexion incluidos
	 * @param resulset Resultset a cerrar
	 * @param prepareStatement Prepare Statement a cerrar
	 * @param conn Conexion a la base de datos
	 */
	public static void closeConnectionIssues( ResultSet resulset, PreparedStatement prepareStatement, Connection conn ) {
		// Cierra los elementos de sql requeridos
		closeResultset(resulset);
		closePrepareStatement(prepareStatement);
    	closeConnection(conn);
	}
	
	/**
	 * Cierra los elementos de conexion incluidos
	 * @param resulset Resultset a cerrar
	 * @param prepareStatement Prepare Statement a cerrar
	 */
	public static void closeConnectionIssues( ResultSet resulset, PreparedStatement prepareStatement ) {
		// Cierra los elementos de sql requeridos
		closeResultset(resulset);
		closePrepareStatement(prepareStatement);
	}
	
	/**
	 * Cierra los elementos de conexion incluidos
	 * @param prepareStatement Prepare Statement a cerrar
	 * @param conn Conexion a la base de datos
	 */
	public static void closeConnectionIssues( PreparedStatement prepareStatement, Connection conn ) {
		// Cierra los elementos de sql requeridos
		closePrepareStatement(prepareStatement);
    	closeConnection(conn);
	}
	
	/**
	 * Cierra los elementos de conexion incluidos
	 * @param prepareStatement Prepare Statement a cerrar
	 * @param resulset Resultset a cerrar
	 */
	public static void closeConnectionIssues( PreparedStatement prepareStatement, ResultSet resulset ) {
		// Cierra los elementos de sql requeridos
		closeResultset(resulset);
		closePrepareStatement(prepareStatement);
	}
	
	/**
	 * Cierra los elementos de conexion incluidos
	 * @param prepareStatement Prepare Statement a cerrar
	 */
	public static void closeConnectionIssues( PreparedStatement prepareStatement ) {
		// Cierra los elementos de sql requeridos
		closePrepareStatement(prepareStatement);
	}
	
	
}
